AWS Lambdaを1分間隔でスケジュール実行する #reinvent
はじめに
re:invent 2015でLambdaにスケジュール化されたファンクション(Cron)機能が追加されました。 スケジュールの指定は
rate(5 minutes)
のように間隔を指定する方法と
cron(*/5 * * * ? *)
の用にcron形式で指定する方法があります。 Walkthrough 5: Using Lambda Functions to Process Scheduled Events (Python)
ただし、スケジュールの最短間隔は5分のため、それ以下で指定するとエラーが発生してしまいます。 例えば、毎分実行される用に設定しようとしても
今回は力技で解決してみました。
設定と結果
イベントソースとして下記のような設定のスケジューラを作成しました。
- cron(*/5 * * * ? *)
- cron(1,6,11,16,21,26,31,36,41,46,51,56 * * * ? *)
- cron(2,7,12,17,22,27,32,37,42,47,52,57 * * * ? *)
- cron(3,8,13,18,23,28,33,38,43,48,53,58 * * * ? *)
- cron(4,9,14,19,24,29,34,39,44,49,54,59 * * * ? *)
5分間隔のスケジューラーを5つ作ることで結果として1分ずつ実行されるようにしています。
CloudWatchでInvocation数を確認したところ、ちゃんと毎分実行されていました。
最後に
5分よりも短い間隔で頻繁にLambda実行したい場合はイベントソースを増やすことで対応できそうです。
AWS Lambdaのスケジュール実行の活用例は本ブログでもいくつか紹介しているので、こちらもご参照ください。 LambdaのScheduleイベントでEC2を自動起動&自動停止してみた#reinvent AWS LambdaからPythonでEC2のインスタンスを起動するスケジュールを設定してみた #reinvent